%%====================================================================
%% Pattern type tags.
%%====================================================================
-define(BGP_TAG_SA,	'$bgp').
-define(QUAD_TAG_SA,	'$qp').
-define(JOIN_TAG_SA,	'$join').
-define(LJOIN_TAG_SA,	'$ljoin').
-define(FILTER_TAG_SA,	'$filter').

-record(?QUAD_TAG_SA,{s,p,o,g}).

-record(solset,{expr,key_var,var_map_acc}).

%%====================================================================
%% Boolean operator tags.
%%====================================================================
%Binary ops
-define(AND_TAG_SA,		'$and').
-define(OR_TAG_SA,			'$or').
%Unary ops
-define(NOT_TAG_SA,		'$not').
%Binary predicates
-define(EQUAL_TAG_SA,		'$eq').
-define(NOTEQUAL_TAG_SA,	'$ne').
-define(GREATER_TAG_SA,	'$gr').
-define(LESS_TAG_SA,		'$ls').
-define(GREATEREQUL_TAG_SA,'$ge').
-define(LESSEQUL_TAG_SA,	'$le').
%Unary predicates
-define(BOUND_TAG_SA,		'$bound').
-define(ISURI_TAG_SA,		'$isUri').
-define(ISLITERAL_TAG_SA,	'$isLiteral').
-define(REGEX_TAG_SA,		'$regex').

-define(IS_CONST(Node),not is_atom(Node)).
-define(IS_VAR(Node),is_atom(Node) andalso Node/='_'). 